#ifndef CONDITIONVARIABLE_H_
#define CONDITIONVARIABLE_H_

#include "pthread.h"
#include "MutexEncapsulation.h"

/**
 *@class ConditionVariable
 *@brief Clase que encapsula el comportamiento de una Condition Variable.
 */
class ConditionVariable {

private:
	pthread_cond_t condVariable; /** Condition Variable */
	MutexEncapsulation* mutex; /** MutexEncapsulation asociado a la condition variable */


public:
	ConditionVariable();

	/**
	 * Devuelve el MutexEncapsulation asociado
	 */
	MutexEncapsulation* getMutex();

	/**
	 * Espera a que alguien llame a signal
	 */
	void wait();

	/**
	 * Suelta al thread que estaba trabado con signal
	 */
	void signal();

	virtual ~ConditionVariable();
};

#endif /* CONDITIONVARIABLE_H_ */
